import axios, { type Method } from 'axios';
import 'element-plus/theme-chalk/el-message.css';
import { ElMessage } from 'element-plus';
// import { useUserStore } from '@/stores/userStore.ts';
import router from '@/router';

const baseURL = import.meta.env.VITE_BASE_URL
const timeout = 30000

//axios.create()方法可以执行多次，每次执行会生成一个新实例  可以实现不同业务模块需要的接口基地址不同
const instance = axios.create({
  baseURL,
  timeout,
})

// axios请求拦截器
instance.interceptors.request.use(
  (config) => {
    // const userStore = useUserStore();
    // const token = userStore.userInfo.token;
    // if (token) {
    //   config.headers.Authorization = `Bearer ${token}`;
    // }
    return config;
  },
  (e) => Promise.reject(e)
);

// axios响应式拦截器
instance.interceptors.response.use(
  (res) => res.data,
  (e) => {
    // const userStore = useUserStore();
    ElMessage({
      type: 'warning',
      message: e.response.data.message
    });
    if (e.response.status === 401) {
      // userStore.clearUserInfo();
      router.push('/login');
    }
    return Promise.reject(e);
  }
);


type Data<T> = {
  code: string
  msg: string
  result: T
}
/**
 * @description:请求工具函数
 * @param {*} 参数：url  method  submitData
 * @return {instance}  调用接口的promise对象
 */
const request = <T>(url: string, method: Method = 'GET', submitData?: object) => {
  // 泛型的第二个参数，可以自定义响应数据类型
  return instance.request<T, Data<T>>({
    url,
    method,
    // 区分get和其他请求post
    // get 提交数据，选项：params 其他请求post 提交数据，选项：data
    [method.toUpperCase() === 'GET' ? 'params' : 'data']: submitData,
  })
}

export { baseURL, instance, request }
